#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 定义缓存节点结构
typedef struct CacheNode
{
    char *key;
    int frequency;
} CacheNode;

// 定义小根堆结构
typedef struct MinHeap
{
    CacheNode *array;
    int capacity;
    int size;
} MinHeap;

//销毁小根堆
void DestroyHeap(MinHeap *minHeap);
// 创建小根堆
MinHeap *CreateMinHeap(int capacity);
// 交换两个节点
void Swap(CacheNode *a, CacheNode *b);
// 获取节点的左子节点索引
int Left(int i);
// 获取节点的右子节点索引
int Right(int i);
// 获取节点的父节点索引
int Parent(int i);
// 向上调整堆
void HeapifyUp(MinHeap *minHeap, int index);
// 向下调整堆
void HeapifyDown(MinHeap *minHeap, int index);
// 插入节点到小根堆
void HeapInsert(MinHeap *minHeap, char *key);
// 删除最小元素（使用频率最低的元素）
CacheNode ExtractMin(MinHeap *minHeap);
// 增加节点的使用频率
void IncreaseFrequency(MinHeap *minHeap, char *key);
// 打印小根堆
void PrintHeap(MinHeap *minHeap);

